package com.jinyi.wwdeng.autodialer.utils

/**
 * App Sp 配置
 */
object AppConfig {

    // 用户相关配置
    var userId: String
        get() = SPUtils.getString("sp_key_user_id", "")
        set(value) = SPUtils.putString("sp_key_user_id", value)

    var userName: String
        get() = SPUtils.getString("sp_key_user_name", "")
        set(value) = SPUtils.putString("sp_key_user_name", value)

    var userToken: String
        get() = SPUtils.getString("sp_key_user_token", "")
        set(value) = SPUtils.putString("sp_key_user_token", value)

    // 清空用户数据（退出登录时使用）
    fun clearUserData() {
        SPUtils.remove("sp_key_user_id")
        SPUtils.remove("sp_key_user_name")
        SPUtils.remove("sp_key_user_token")
    }
}

/**
 * 服务配置
 */
data class ServiceConfig(
    val dialInterval: Long = 10,      // 秒
    val uploadInterval: Long = 15,    // 秒
    val reportInterval: Long = 15,    // 秒
    val maxConcurrentCalls: Int = 1,  // 单任务
    val maxRetryCount: Int = 3,       // 失败重试次数
    val retryDelay: Long = 5          // 秒
)

/**
 * 异常分类
 */
sealed class AppException(message: String) : Exception(message) {
    // 网络异常
    data class NetworkException(val url: String, val code: Int) :
        AppException("网络请求失败: $url, 状态码: $code")

    data class TimeoutException(val operation: String) :
        AppException("操作超时: $operation")

    // 文件异常
    data class FileNotFoundException(val path: String?) :
        AppException("文件不存在: $path")

    data class FileUploadException(val reason: String) :
        AppException("文件上传失败: $reason")

    // 数据库异常
    data class DatabaseException(val operation: String) :
        AppException("数据库操作失败: $operation")

    // 业务异常
    data class NoAvailableNumberException(val error: String):
        AppException("没有可用的电话号码")

    data class CallPermissionException(val error: String) :
        AppException("拨号权限不足")

    data class RecordingException(val reason: String) :
        AppException("录音失败: $reason")

    // 服务状态异常
    data class ServiceNotReadyException(val error: String) :
        AppException("服务未就绪")
}